package savet.gui.modelos;

import java.util.Date;
import java.util.List;
import java.util.Observable;
import savet.entidades.Trabalhador;
import savet.entidades.atributos.AtributoData;
import savet.entidades.atributos.Ferias;
import savet.util.DataUtil;
import savet.util.Trabalhadores;

/**
 *
 * @author Adisson Marinho
 */
public class ModeloFerias extends AbstractAtributoDataModel {

    public ModeloFerias(Object[] colunas, Date inicio, Date fim) {
        super(colunas, inicio, fim);
    }

    public ModeloFerias(Object[] colunas) {
        super(colunas);
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Trabalhador t = getTrabalhador(rowIndex);
        Ferias ferias = t.getFerias();
        if (ferias != null) {
            List<AtributoData> atributosData = ferias.getAtributosData();
            AtributoData att = atributosData.get(columnIndex);
            return att;
        }
        return null;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Trabalhador t = getTrabalhador(rowIndex);
        t.getFerias().getAtributosData().set(columnIndex, (AtributoData) aValue);
    }

    public void elementoAdicionado(Trabalhador trabalhador) {
        criarAtributoFerias(trabalhador);
    }

    public void elementoRemovido(Trabalhador trabalhador) {
        fireTableDataChanged();
    }

    protected void carregarAtributos() {
        for (Trabalhador trabalhador : trabalhadores) {
            criarAtributoFerias(trabalhador);
        }
    }

    private void criarAtributoFerias(Trabalhador trabalhador) {
        if (trabalhador.getAdmissao() != null) {
            if (trabalhador.getFerias() == null) {
                Ferias ferias = new Ferias();
                ferias.setTrabalhador(trabalhador);
                ferias.setAtributosData(Trabalhadores.getListaAtributoMeses(inicioPeriodo, fimPeriodo));
                trabalhador.setFerias(ferias);
                fireTableDataChanged();
            } else {
                atualizarAtributoFerias(trabalhador);
            }
        }
    }

    private void atualizarAtributoFerias(Trabalhador trabalhador) {
        Ferias ferias = trabalhador.getFerias();
        if (ferias != null) {
            if (trabalhador.getAdmissao() != null) {

                List<AtributoData> oldAtributosData = ferias.getAtributosData();
                List<AtributoData> newAtributosData = Trabalhadores.getListaAtributoMeses(inicioPeriodo, fimPeriodo);

                System.out.println("\n========= Atualiza FERIAS ===========");
                System.out.print(newAtributosData.size() + " atributos");
                System.out.println("\n===================================\n");

                super.atualizaListaAtributos(newAtributosData, oldAtributosData);
                ferias.setAtributosData(newAtributosData);
            }
        } else {
            criarAtributoFerias(trabalhador);
        }
    }

    @Override
    public void update(Observable o, Object arg) {
        if (arg instanceof Trabalhador) {
            Trabalhador t = (Trabalhador) arg;
            atualizarAtributoFerias(t);
        }
    }
}
